package com.example.d5_tcp2;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 目标：完成TCP通信快速入门-服务端开发：实现多发多收
 */
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("-----服务端启动成功-------");
        // 1.创建ServerSocket的对象,同时为服务端注册端口
        ServerSocket serverSocket = new ServerSocket(8888);

        // 2.使用serverSocket对象,调用一个accept方法,等待客户端的连接请求
        Socket socket = serverSocket.accept();

        // 3.从socket通信管道中得到一个字节输入流
        InputStream is = socket.getInputStream();

        // 4.把原始的字节输入流包装成数据输入流
        DataInputStream dis = new DataInputStream(is);

        while (true) {
            try {
                // 5.使用数据输入流读取客户端发送过来的消息
                // 这里dis.readUTF()一直在等待客户端发送的信息,可是客户端输入exit之后结束取消发送了并且会关闭管道和连接
                // 此时这里就会抛出异常,因此我们可以捕获异常,然后可以知道客户端是否已经断开连接,并关闭对应的资源
                String rs = dis.readUTF();
                System.out.println(rs);
            } catch (Exception e) {
                System.out.println(socket.getRemoteSocketAddress() + "断开连接");
                dis.close();
                socket.close();
                break;
            }
            // 其实我们也可以获取客户端的IP地址
            // System.out.println(socket.getRemoteSocketAddress());
        }
    }
}













